/**
 * 链队列实现
 * 
 * @author 杨满球（本地）
 *
 */
class LinkQueue {
	// 头节点
	private Node front;
	// 尾节点
	private Node rear;

	/**
	 * 判断队列是否为空
	 * 
	 * @return 队列为空，返回true，否则返回false
	 */
	public boolean isEmpty() {
		if (front == null) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 清空整个队列
	 */
	public void clear() {
		front = null;
		rear = null;
	}

	/**
	 * 获得队列内元素个数
	 * 
	 * @return 队列内元素的个数
	 */
	public int length() {
		Node p = front;
		int length = 0;
		while (p != null) {
			p = p.getNextNode();
			length++;
		}
		return length;
	}

	/**
	 * 取队首元素
	 */
	public Object peek() {
		if (front == null) {
			return null;
		} else {
			return front.getData();
		}
	}

	/**
	 * 入队
	 * 
	 * @param data
	 *            需要入队的元素值
	 */
	public void offer(Object data) {
		Node lastNode = rear;
		rear = new Node(data);
		if (front == null) {
			front = rear;
		} else {
			lastNode.setNextNode(rear);
		}
	}

	/**
	 * 出队
	 * 
	 * @return 队首元素
	 */
	public Object poll() {
		if (front == null) {
			return null;
		} else {
			Node p = front;
			if (front == rear) {
				front = null;
				rear = null;
			} else {
				front = front.getNextNode();
			}
			return p.getData();
		}
	}

	/**
	 * 获得队列的字符串表示形式
	 * 
	 * @return 队列的字符串表示形式
	 */
	public String getString() {
		String qString = "";
		if (front == null) {
			return "Queue is empty!";
		} else {
			Node p = front;
			while (p != null) {
				qString = qString + p.getData().toString() + "\n";
				p = p.getNextNode();
			}
		}
		return qString;
	}
}
